package com.example.demo.streamstudy;

import com.example.demo.setstudy.Student;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Stream;

/**
 * @Description StreamTest3
 * @Author songchuanlong
 * @Date 2025-05-21
 */
public class StreamTest3 {
    public static void main(String[] args) {
        List<Double> scores = new ArrayList<>();
        Collections.addAll(scores,88.5,100.0,60.0,99.0,9.5,99.6,25.0);
        List<Student>students=new ArrayList<>();
        Student s1=new Student("蜘蛛精",26,172.5);
        Student s2=new Student("蜘蛛精",26,172.5);
        Student s3=new Student("紫霞",23,167.6);
        Student s4=new Student("白晶晶",25,169.5);
        Student s5=new Student("牛魔王",35,183.3);
        Student s6=new Student("牛夫人",34,168.5);
        Collections.addAll(students,s1,s2,s3,s4,s5,s6);
        //需求1：找出成绩大于等于60分的数据，并升序后，再输出。
//        scores.stream().filter(score -> score >= 60).sorted().forEach(score-> System.out.println(score));
        //需求2：找出年龄大于等于23，且年龄小于等于30岁的学生，并按照年龄降序输出
//        students.stream().filter(s-> s.getAge()>= 23 && s.getAge()<=30).sorted(((o1, o2) -> o1.getAge()-o2.getAge())).forEach(s-> System.out.println(s));
        //需求3：取出身高最高的前3名学生，并输出。
//        students.stream().sorted(((o1, o2) -> Double.compare(o2.getHeight(),o1.getHeight()))).limit(3).forEach(s-> System.out.println(s));
        //需求4：取出身高倒数的2名学生，并输出。
        students.stream().sorted(((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight()))).limit(2).forEach(s-> System.out.println(s));
        System.out.println("===========");
        students.stream().sorted(((o1, o2) -> Double.compare(o2.getHeight(),o1.getHeight()))).skip(students.size()-2).forEach(s-> System.out.println(s));
        //需求5：找出身高超过168的学生叫什么名字，要求去除重复的名字，再输出。  使用map集合将对象中的名字转成流或者是转换对象里面的其他内容  使用distinct方法·
        students.stream().filter(k->k.getHeight()>168).map(k->k.getName()).distinct().forEach(k-> System.out.println(k));
        //6、合并两个流
        Stream<String> 张三 = Stream.of("张三", "李四");
        Stream<String> 张三2 = Stream.of("张三2", "李四2");
        Stream<String> concat = Stream.concat(张三, 张三2);
        concat.forEach(s -> System.out.println(s));

    }
}
